'use strict';
/**
 * @name: 淘宝小程序云函数封装mongodb
 * @description: 针对于框架进行了封装
 * @version: 0.0.1
 * @author: xiech
 * @Date: 2020-12-10 13:53:30
 * @LastEditors: xiech
 * @LastEditTime: 2020-12-10 13:53:30
 */

module.exports = async (ctx) => {
  
  const mongodb = ctx.cloud.db;
  if(!mongodb) return;
  const mfmongodb = {};

  /**
   * @description: 增加一条数据
   * @param {string} col 集合
   * @param {object} data 数据
   * @return {id} mongodb返回的ID
   */
  mfmongodb.insertOne = async (col, data) => {
    let result = await mongodb.collection(col).insertOne(data);
    return result;
  }

  /**
   * @description: 增加多条数据
   * @param {string} col 集合
   * @param {object[]} data 数据
   * @return {object[]} mongodb返回的ID
   */
  mfmongodb.insertMany = async (col, data) => {
    let result = await mongodb.collection(col).insertMany(data);
    return result;
  }

  /**
   * @description: 删除多条数据
   * @param {string} col 集合
   * @param {object} filter 过滤条件
   * @return {number} 删除的数量
   */
  mfmongodb.deleteMany = async (col, filter) => {
    let result = await mongodb.collection(col).deleteMany(filter);
    return result;
  }

  /**
   * @description: 更新数据
   * @param {string} col 集合
   * @param {object} filter 过滤条件
   * @param {object} data 数据
   * @return {number} 修改的数量
   */
  mfmongodb.updateMany = async (col, filter, data) => {
    let result = await mongodb.collection(col).updateMany(filter, data);
    return result;
  }

  /**
   * @description: 统计数据
   * @param {string} col 集合
   * @param {object} filter 过滤条件
   * @return {number} 统计数量
   */
  mfmongodb.count = async (col, filter) => {
    let result = await mongodb.collection(col).count(filter);
    return result;
  }

  /**
   * @description: 查询数据
   * @param {string} col 集合
   * @param {object} filter 过滤条件
   * @param {object} sort 排序规则, key是排序名字，value是1或-1 {_id: 1}
   * @param {number} skip 跳过的文档数量 分页查询使用
   * @param {number} limit 查询的文档数量限制
   * @return {number} 统计数量 
   */
  mfmongodb.find = async (col, filter, sort, skip = 0, limit) => {
    const options = {};
    if (sort) options.sort = sort;
    if (skip) options.skip = skip;
    if (limit) options.limit = limit;
    const result = await mongodb.collection(col).find(filter, options);
    return result;
  }



  return mfmongodb;
}